/**
 * @(#)Regex.java, 10月 11, 2023.
 * <p>
 * Copyright 2023 yuanfudao.com. All rights reserved.
 * FENBI.COM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package yfd;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author leiwenkang
 */
public class Regex {
    public static void main(String[] args) {
//        String result = removeEmptyParagraphs("<p></p> <p> Hello World </p> <p>    </p> <p></p><p>  Hi  </p>");
//        String result = removeExtraBrTags("Hello<br/><br/>World<\\br><\\br>Test<br><br>End");
//        String result = removeTrailingNBSP("&nbsp;Hello&nbsp;World&nbsp;&nbsp;&nbsp;");
        String result = removeEmptyPTags("Hello<p><span></span><br/><span></span><br/></p>World<p></p>End");
        System.out.println("\"" + result + "\"");
    }

    public static String removeEmptyParagraphs(String str) {
        // 正则表达式匹配完全空的 <p></p> 标签
        final String regex = "<p></p>";
        return str.replaceAll(regex, "");
    }

    public static String removeExtraBrTags(String str) {
        // 正则表达式匹配连续的多个 <br/>, <\\br> 或者 <br> 标签。
        final String regex = "((<br/>|<\\\\br>|<br>){2,})";
        return str.replaceAll(regex, "<br/>");
    }

    public static String removeTrailingNBSP(String str) {
        // 正则表达式匹配字符串尾部的一个或多个 &nbsp;
        Pattern pattern = Pattern.compile("&nbsp;+$");
        while (true) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                str = str.replaceAll("&nbsp;+$", "");
            } else {
                // 否则返回原字符串
                break;
            }
        }

        return str;
    }

    public static String removeEmptyPTags(String str) {
        // 正则表达式匹配包含或仅包含空 span 或 br 标签的 p 标签
        final String regex = "<p>((<span></span>|<br/>)*)</p>";
        return str.replaceAll(regex, "");
    }
}